perm filename FILL.FAI[RST,LCS] blob
sn#231774 filedate 1976-08-16 generic text, type C, neo UTF8
COMMENT ā VALID 00002 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 TITLE FILLER
C00007 ENDMK
Cā;
TITLE FILLER
ENTRY FILLER
EXTERNAL PLTR,ALF,LINES
FLM: BLOCK =600
; SUBROUTINE FILLER(QQ,MD)
; COMMON /ALF/NO,H(72) /PLTR/P,RHT,DIS
; DIMENSION Q(1)
; H(72) =NO MORE THAN 72 SEGS AT ANY SLICE POSITION!!!
FILLER: 0 ; EQUIVALENCE (Q,I),(KNT,I(3))
MOVE FLM ; RL=Q(1)
MOVEM LEFT# ; FLOATING!
MOVEM RIGHT# ; RR=RL
SETZ 2, ; DO 1 K=1,KNT,3
FL1: MOVE FLM+2(2) ;CC Q(K)=IFIX(Q(K))
CAIN 3 ;CC Q(K+1)=IFIX(Q(K+1))
SETOM FLM+2(2) ;DO THIS ABOVE? IF(I(K+2).EQ.3)I(K+2)=-1
MOVE FLM(2) ; A=Q(K)
CAMN FLM+3(2) ; IF(Q(K+3).EQ.A)I(K+5)=-1
SETOM FLM+5(2) ;C VERTICAL LINES WILL BE IGNORED.
CAMGE LEFT ; IF(RL.GT.A)RL=A
MOVEM LEFT
CAMLE RIGHT ;1 IF(RR.LT.A)RR=A
MOVEM RIGHT ;C GET LEFT AND RIGHT EXTREME LIMITS.
ADDI 2,3 ;K=K+3
CAMGE 2,FLM+2 ;I(3)
JRST FL1
MOVN [0.5] ; RR=RR-.5
FADRM RIGHT
FADRM LEFT ; RL=RL-.5
FL2: MOVSI 201400 ;2 RL=RL+1
FADRB LEFT ;C SLICE COUNTER
CAML RIGHT ; IF(RL.GT.RR)RETURN
JRA 16,2(16)
SETZ 11, ; M=0
MOVEI 2,3 ; DO 3 J=4,KNT,3
FL3: SKIPGE FLM+2(2) ; IF(I(J+2))GO TO 3
JRST FLX3
MOVE FLM(2) ;A IF(IHORZ(I,J,RL))GO TO 3
MOVE 1,FLM-3(2) ;B C FINDS SEGS UNDER SLICE AND REJECTS VERTICALS.
CAML 0,1 ; FUNCTION IHORZ(Q,J,RL)
EXCH 0,1 ; DIMENSION Q(1)
CAML 0,LEFT ; IHORZ=-1
JRST FLX3 ; A=Q(J)
CAMG 1,LEFT ; B=Q(J-3)
JRST FLX3 ;PREVIOUS X COORD. IF(A.GT.B)CALL EXCH(A,B)
AOJ 11, ; IF(RL.LE.B.AND.RL.GE.A)IHORZ=0
; M=M+1
; H(M)=HGT(J,RL,I)
MOVE 3,FLM+1(2) ; FUNCTION HGT(J,RL,Q)
FSBR 3,FLM-2(2) ; DIMENSION Q(1)
MOVE LEFT ; HGT=Q(J-2)
FSBR FLM-3(2) ;C PREVIOUS Y COORD.
FMPR 3,0 ; A=Q(J-3)
MOVE FLM(2) ;C PREVIOUS X COORD.
FSBR FLM-3(2) ; HGT=((Q(J+1)-HGT)*(RL-A))/(Q(J)-A)+HGT
FDVR 3,0 ;CAN HAVE A DIVIDE BY ZERO HERE!!
FADR 3,FLM-2(2) ;3 CONTINUE
MOVEM 3,ALF(11) ;H(M)
FLX3: ADDI 2,3
CAMGE 2,FLM+2
JRST FL3
JUMPE 11,FL2 ; IF(M.EQ.0)GO TO 2
;C M=0=SPACE BETWEEN OBJECTS -- NO FILLER
MOVEI 2,1 ; J=1
FL5: MOVE ALF(2) ;5 IF(H(J).GE.H(J+1))GO TO 4
CAML ALF+1(2) ;C SORTS HEIGHTS
JRST FL4 ; CALL EXCH(H(J),H(J+1))
EXCH 0,ALF+1(2)
MOVEM ALF(2)
CAIN 2,1 ; IF(J.EQ.1)GO TO 4
JRST FL4
SOJ 2, ; J=J-1
JRST FL5 ; GO TO 5
FL4: AOJ 2, ;4 J=J+1
CAMGE 2,11 ; IF(J.LT.M)GO TO 5
JRST FL5 ;C GO BACK IF MORE SORTING TO BE DONE
MOVEI 14,1 ; NN=1
FL6: MOVE 13,ALF(14) ;CCCCC6 IF(H(NN).EQ.H(NN+1))GO TO 7
MOVE 12,ALF+1(14) ; A=H(NN)
MOVE 13 ; B=H(NN+1)
FSBR 12
CAMG [2.0] ; IF(A-B.GT.1)CALL LINX(RL,A-1.,RL,B+1.)
JRST FL7
FSBR 13,[1.0]
FADR 12,[1.0] ;A IS 13, B IS 12
JSA 16,LINES
JUMP LEFT
JUMP 13
JUMP [3]
JSA 16,LINES
JUMP LEFT
JUMP 12
JUMP [2]
FL7: ADDI 14,2 ;7 NN=NN+2
CAMGE 14,11 ;C SKIP BY 2'S
JRST FL6 ; IF(NN.LT.M)GO TO 6
JRST FL2 ; GO TO 2
END